﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Data.SqlClient;

namespace InhollandAirPortal {
  public class Global : System.Web.HttpApplication {

    protected void Application_Start(object sender, EventArgs e) {

    }

    protected void Session_Start(object sender, EventArgs e) {

    }

    protected void Application_BeginRequest(object sender, EventArgs e) {
      /* Elke request wordt gelogd voor audit trailing doeleinden */
      if (IsDatabaseConnectionAvailable()) {
        new Logger(this).WriteLog();
      }else{
        // Database niet beschikbaar, wegschrijven naar alternatieve database.
      //Alternatieve database buiten scope van project, log wordt niet geschreven.
      }
    }

    protected void Application_AuthenticateRequest(object sender, EventArgs e) {

    }

    protected void Application_Error(object sender, EventArgs e) {
      if (IsDatabaseConnectionAvailable()) {
        /* Elke error afvangen en wegschrijven naar de database */
        Exception CurrentException;
        CurrentException = Server.GetLastError();
        if (CurrentException != null) {
          new ExceptionLogger(this, CurrentException).WriteLog();
        }
      } else {
        // Database niet beschikbaar, wegschrijven naar alternatieve database.
        //Alternatieve database buiten scope van project, log wordt niet geschreven.
      }
    }

    protected void Session_End(object sender, EventArgs e) {

    }

    protected void Application_End(object sender, EventArgs e) {
    }

    private bool IsDatabaseConnectionAvailable() {
      //returns true if available
      using (LoyalityDB DB = new LoyalityDB()) {
        return DB.CheckAvailability();
      }
    }

  }
}